[Reg2Mem] Add legacy pass wrapping Reg2Mem#111024
Merged
Conversation
Member
|
@llvm/pr-subscribers-llvm-transforms Author: Nathan Gauër (Keenuts) ChangesThe SPIR-V backend will need to use Reg2Mem, hence this pass needs to be wrapped to be used with the legacy pass manager. Full diff: https://github.com/llvm/llvm-project/pull/111024.diff 2 Files Affected:
diff --git a/llvm/include/llvm/Transforms/Scalar/Reg2Mem.h b/llvm/include/llvm/Transforms/Scalar/Reg2Mem.h
index 25f6563d7dcfc2..f7815ca9a9a18c 100644
--- a/llvm/include/llvm/Transforms/Scalar/Reg2Mem.h
+++ b/llvm/include/llvm/Transforms/Scalar/Reg2Mem.h
@@ -13,7 +13,11 @@
#ifndef LLVM_TRANSFORMS_SCALAR_REG2MEM_H
#define LLVM_TRANSFORMS_SCALAR_REG2MEM_H
+#include "llvm/Analysis/LoopInfo.h"
+#include "llvm/IR/Dominators.h"
#include "llvm/IR/PassManager.h"
+#include "llvm/InitializePasses.h"
+#include "llvm/Pass.h"
namespace llvm {
@@ -22,6 +26,27 @@ class RegToMemPass : public PassInfoMixin<RegToMemPass> {
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
};
+class RegToMemWrapperPass : public FunctionPass {
+public:
+ static char ID;
+
+ RegToMemWrapperPass();
+
+ void getAnalysisUsage(AnalysisUsage &AU) const override {
+ AU.setPreservesAll();
+
+ AU.addPreserved<DominatorTreeWrapperPass>();
+ AU.addRequired<DominatorTreeWrapperPass>();
+
+ AU.addPreserved<LoopInfoWrapperPass>();
+ AU.addRequired<LoopInfoWrapperPass>();
+ }
+
+ bool runOnFunction(Function &F) override;
+};
+
+FunctionPass *createRegToMemWrapperPass();
+
} // end namespace llvm
#endif // LLVM_TRANSFORMS_SCALAR_REG2MEM_H
diff --git a/llvm/lib/Transforms/Scalar/Reg2Mem.cpp b/llvm/lib/Transforms/Scalar/Reg2Mem.cpp
index ebc5075aa36fe8..33ae5faeba1198 100644
--- a/llvm/lib/Transforms/Scalar/Reg2Mem.cpp
+++ b/llvm/lib/Transforms/Scalar/Reg2Mem.cpp
@@ -105,3 +105,31 @@ PreservedAnalyses RegToMemPass::run(Function &F, FunctionAnalysisManager &AM) {
PA.preserve<LoopAnalysis>();
return PA;
}
+
+namespace llvm {
+void initializeRegToMemWrapperPassPass(PassRegistry &);
+} // namespace llvm
+
+INITIALIZE_PASS_BEGIN(RegToMemWrapperPass, "reg-to-mem", "", true, true)
+INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass);
+INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass);
+INITIALIZE_PASS_END(RegToMemWrapperPass, "reg-to-mem", "", true, true)
+
+char RegToMemWrapperPass::ID = 0;
+
+RegToMemWrapperPass::RegToMemWrapperPass() : FunctionPass(ID) {}
+
+bool RegToMemWrapperPass::runOnFunction(Function &F) {
+ DominatorTree *DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
+ LoopInfo *LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
+
+ unsigned N = SplitAllCriticalEdges(F, CriticalEdgeSplittingOptions(DT, LI));
+ bool Changed = runPass(F);
+ if (N == 0 && !Changed)
+ return false;
+ return true;
+}
+
+FunctionPass *llvm::createRegToMemWrapperPass() {
+ return new RegToMemWrapperPass();
+}
|
Contributor
Author
|
Hi! Here is some additional context on where we plan on using Reg2Mem pass if you need: |
nikic
reviewed
Oct 3, 2024
Contributor
Author
|
Thanks! Moved to cpp, and renamed the pass to |
Contributor
Author
|
Added the header functions to be able to instantiate it. |
The SPIR-V backend will need to use Reg2Mem, hence this pass needs to be wrapped to be used with the legacy pass manager. Signed-off-by: Nathan Gauër <brioche@google.com>
Signed-off-by: Nathan Gauër <brioche@google.com>
Contributor
Author
|
Back from holiday! Thanks for the review. Rebased on main, will wait for green CI and local tests & submit. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The SPIR-V backend will need to use Reg2Mem, hence this pass needs to be wrapped to be used with the legacy pass manager.